| ..:: Menu ::.. | ..:: Lekcja 4: Podstawy Object Pascala część: 9 ::.. | ..::Info i Reklamy::.. |
|
Strona Główna Kursy DELPHI Kursy C++ Linki Forum Download Seriale Humor Reklama O autorze |
Słowo o algorytmachAlgorytm - skończona sekwencja komend, która ma na celu rozwiązanie jakiegoś problemu. Innymi słowy jest to rozwiązanie jakiegoś problemu. Napiszmy jakiś algorytm. Zadanie będzie wyglądało następująco: przeszukać w tablicy interesującego elementu, a następnie zwrócić indeks pod którym się znajduje. Najpierw deklarujmy tablice: const { deklarujemy tablice imion wśród których będziemy szukać } Tablica : array[0..4] of String = ('Zenowefa', 'Anita', 'Aga', 'Magda', 'Sylwia'); Teraz najważniejsza część zadania - napisanie algorytmu, który realizował będzie proces przeszukiwania. function Szukaj(Element: String) : Integer; var I : Integer; begin { Funkcja poszukuje w tablicy elementu określonego w parametreze "Element". Jeżeli znajdzie to zwraca numer pod którym element się znajduje. } I := 0; // wartość początkowa { Kontynuj dopóki nie przeszukasz całej tablicy i dopóki nie znajdziesz elemntu } while (I < High(Tablica)) and (Tablica[i] <> Element) do Inc(i); // zmień obszar poszukiwać o jeden { jeżeli nie znajdziesz to zwróć -1 } if Tablica[i] <> Element then Result := -1 else Result := i; { jeżeli znajdziesz to zwróć numer pod którym się znajduje } end; Tylko się nie przestrasz! Większą część stanowią komentarze. Wykorzystałem do tego pętle while. Na samym początku deklaruje wartość zmiennej I - od tego elementu zaczynamy poszukiwania. Następnie następuje sprawdzenie, czy przeszukano już całą tablicę i czy "przeglądany" element jest różny od szukanego. Jeżeli tak to zwiększ obszar poszukiwań o jeden i sprawdź, czy "przeglądany" aktualnie element nie jest tym którego szukamy. Jeżeli nie znaleziono to zwróć -1, a w przeciwnym wypadku zwróć indeks poszukiwanego elementu. { Copyright (c) 2001 - Adam Boduch } program algo1; uses Windows, Dialogs, SysUtils; const { deklarujemy tablice imion wśród których będziemy szukać } Tablica : array[0..4] of String = ('Zenowefa', 'Anita', 'Aga', 'Magda', 'Sylwia'); function Szukaj(Element: String) : Integer; var I : Integer; begin { Funkcja poszukuje w tablicy elementu określonego w parametrze "Element". Jeżeli znajdzie to zwraca numer pod którym element się znajduje. } I := 0; // wartość początkowa { Kontynuuj dopóki nie przeszukasz całej tablicy lub dopóki nie znajdziesz elementu } while (I < High(Tablica)) and (Tablica[i] <> Element) do Inc(i); // zmień obszar poszukiwać o jeden { jeżeli nie znajdziesz to zwróć -1 } if Tablica[i] <> Element then Result := -1 else Result := i; { jeżeli znajdziesz to zwróć numer pod którym się znajduje } end; begin if Szukaj('Anita') <> -1 then // sprawdź, czy znaleziono ShowMessage('Znalazłem szukany element pod indeksem: ' + IntToStr(Szukaj('Anita'))) else ShowMessage('Nie znalazłem'); end. Czasem zamiast poszukiwać tej, czy innej komendy do wykonania jakiegoś zadanie wystarczy, że trochę pomyślimy i być może uda nam się dane zadanie zrealizować. Nie jest to łatwe, przyznaje. Ale kto powiedział, że programowanie jest łatwe? Polecenia Continue i BreakPolecenia te wykorzystywane są wyłącznie w połączeniu z pętlami. Pierwsze z nich powoduje przejście do samego początku pętli. Program nie wykonuje dalszego członu pętli, a powraca na jej początek ( sprawdza warunek jej zakończenia ). Drugie natomiast powoduje natychmiastowe przerwanie działania pętli - wyjście z niej. Oto przykład użycia polecenia Continue:const { deklarujemy tablice imion wśród których będziemy szukać } Tablica : array[0..4] of String = ('Zenowefa', 'Anita', 'Aga', 'Magda', 'Sylwia'); procedure Szukaj(Element: String); var I : Integer; begin for I := Low(Tablica) to High(Tablica) do // punkt A begin if Tablica[i] = Element then // jeżeli element zostanie znaleziony... begin ShowMessage('Znalazłem - kontynuuje'); //... wyświetl informacje Continue; // do punktu A ShowMessage('Ten tekst się nie wyświetli...'); end; end; end; Drugie polecenie Continue nigdy się nie wyświetli. Spowodowało to polecenia Continue. Dzięki niemu nastąpił skok do początku pętli. Teraz kolejny bardzo podobny przykład tyle, że z poleceniem Break: const { deklarujemy tablice imion wśród których będziemy szukać } Tablica : array[0..4] of String = ('Zenowefa', 'Anita', 'Aga', 'Magda', 'Anita'); { dwa razy Anita! } procedure Szukaj(Element: String); var I : Integer; begin for I := Low(Tablica) to High(Tablica) do begin if Tablica[i] = Element then // jeżeli element zostanie znaleziony... begin ShowMessage('Znalazłem - przerywam'); //... wyświetl informacje Break; // koniec programu ShowMessage('Ten tekst się nie wyświetli...'); end; end; end; Zwróć uwagę na to, że przy deklaracji tablicy dwa razy wystąpiło imię "Anita". Lecz program jeżeli znajdzie je raz nie będzie tego robił powtórnie. Dlaczego? Bo zastosowaliśmy komendę Break, która spowodowała właśnie zakończenie pętli. EtykietyWiększość programistów uważa, że stosowanie etykiet jest "nieetyczne" i nie ma takiej konieczności. Ja jednak opiszę tutaj o co chodzi w tych etykietach. Najprościej mówiąc powodują one "skok" do wybranego punktu.procedure Szukaj(Element: String); var I : Integer; label Info; begin for I := Low(Tablica) to High(Tablica) do begin if Tablica[i] = Element then // jeżeli element zostanie znaleziony... begin ShowMessage('Znalazłem'); //... wyświetl informacje goto Info; end; end; Info: ShowMessage('już znalazłem'); end; Na początek etykietę należy zadeklarować. Robi się to za pomocą słowa kluczowego Label. Następnie nazwa etykiety. Jeżeli chcesz do niej natychmiast przeskoczyć stosujesz słowo kluczowe goto, a następnie nazwę etykiety. To nie wszystko bo co ma etykieta robić? Gdzieś w programie musisz napisać jej kod. Najpierw piszesz nazwę etykiety, dwukropek, a później już kod. Być może podałem nie jasny przykład, ale chyba rozumiesz o co chodzi? Funkcje Pred i SuccFunkcje te mają prawie takie same działanie jak polecenia Inc oraz Dec. Jedyna ważna różnica to taka, że Inc i Dec to procedury, a Pred i Succ to funkcje.Tak więc funkcja Pred zmniejsza o jeden - tzn: Pred(100); daje rezultat 99. Użycie funkcji Succ powoduje zwiększenie o jeden. Także napisanie Succ(99) daje liczbę 100. <--- Wstecz | Dalej ---> |
Reklama To miejsce czeka na twoją reklame. Więcej informacji w dziale Reklama |